home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML Instance.sea / XML Instance / Required / ccs_util.jar / regex / RegExp.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-12-09  |  3.8 KB  |  203 lines

  1. package regex;
  2.  
  3. import java.util.Vector;
  4.  
  5. public class RegExp extends RegExpCore {
  6.    protected char getQuotedChar(char var1) {
  7.       if (var1 == '0') {
  8.          return '\u0000';
  9.       } else if (var1 == 'b') {
  10.          return '\b';
  11.       } else if (var1 == 't') {
  12.          return '\t';
  13.       } else if (var1 == 'r') {
  14.          return '\r';
  15.       } else {
  16.          return var1 == 'n' ? '\n' : var1;
  17.       }
  18.    }
  19.  
  20.    public RegExp() {
  21.    }
  22.  
  23.    public RegExp(String var1) throws RegExpSyntaxException, NFABuildException {
  24.       super(var1);
  25.    }
  26.  
  27.    public String substitute(String var1, String var2, boolean var3) {
  28.       return var3 ? this.globalSubstitute(var1, var2) : this.simpleSubstitute(var1, var2);
  29.    }
  30.  
  31.    public MatchInfo match(String var1) {
  32.       return this.match(var1, 0, var1.length());
  33.    }
  34.  
  35.    public MatchInfo match(String var1, int var2, int var3) {
  36.       DState var6 = super.dfa.initialState();
  37.       if ((var2 == 0 || var1.charAt(var2 - 1) == '\n') && super.dfa.hasLHead()) {
  38.          int var5 = this.matchHead(var1, var2, var3, var6);
  39.          if (var5 != -1) {
  40.             return new MatchInfo(var2, var5, var1.substring(var2, var5));
  41.          }
  42.       }
  43.  
  44.       int var4;
  45.       for(var4 = var2; var4 < var3; ++var4) {
  46.          int var7 = this.matchInside(var1, var4, var3, var6);
  47.          if (var7 != -1) {
  48.             return new MatchInfo(var4, var7, var1.substring(var4, var7));
  49.          }
  50.  
  51.          if (var1.charAt(var4) == '\n' && super.dfa.hasLHead() && var4 < var1.length() - 1) {
  52.             var7 = this.matchHead(var1, var4 + 1, var3, var6);
  53.             if (var7 != -1) {
  54.                return new MatchInfo(var4 + 1, var7, var1.substring(var4 + 1, var7));
  55.             }
  56.          }
  57.       }
  58.  
  59.       return super.dfa.hasLTail() && super.dfa.nextState(var6, 3) != null ? new MatchInfo(var4, var4, "") : null;
  60.    }
  61.  
  62.    public MatchInfo[] globalMatch(String var1) {
  63.       int var2 = 0;
  64.       Vector var5 = new Vector();
  65.  
  66.       MatchInfo var3;
  67.       while((var3 = this.match(var1, var2, var1.length())) != null) {
  68.          var5.addElement(var3);
  69.          if (var3.start() == var2 && var3.start() == var3.end()) {
  70.             var2 = var3.end() + 1;
  71.          } else {
  72.             var2 = var3.end();
  73.          }
  74.  
  75.          if (var2 > var1.length() - 1) {
  76.             break;
  77.          }
  78.       }
  79.  
  80.       MatchInfo[] var4 = new MatchInfo[var5.size()];
  81.       var5.copyInto(var4);
  82.       return var4;
  83.    }
  84.  
  85.    public String[] split(String var1) {
  86.       Vector var3 = new Vector();
  87.       int var6 = 0;
  88.       MatchInfo[] var4 = this.globalMatch(var1);
  89.  
  90.       for(int var5 = 0; var5 < var4.length; ++var5) {
  91.          if (var6 != var4[var5].start()) {
  92.             var3.addElement(var1.substring(var6, var4[var5].start()));
  93.          }
  94.  
  95.          var6 = var4[var5].end();
  96.       }
  97.  
  98.       if (var6 < var1.length()) {
  99.          var3.addElement(var1.substring(var6, var1.length()));
  100.       }
  101.  
  102.       String[] var2 = new String[var3.size()];
  103.       var3.copyInto(var2);
  104.       return var2;
  105.    }
  106.  
  107.    protected String globalSubstitute(String var1, String var2) {
  108.       int var3 = 0;
  109.       String var5 = "";
  110.  
  111.       MatchInfo var4;
  112.       while((var4 = this.match(var1, var3, var1.length())) != null) {
  113.          var5 = var5 + var1.substring(var3, var4.start) + this.processReplacement(var2, var4.matchString());
  114.          var3 = var4.end();
  115.          if (var4.start() == var3 && var4.start() == var4.end() || var4.end() > var1.length() - 1) {
  116.             break;
  117.          }
  118.       }
  119.  
  120.       if (var3 < var1.length()) {
  121.          var5 = var5 + var1.substring(var3, var1.length());
  122.       }
  123.  
  124.       return var5;
  125.    }
  126.  
  127.    protected int matchInside(String var1, int var2, int var3, DState var4) {
  128.       char var7 = 0;
  129.       DState var8 = var4;
  130.       int var5 = -1;
  131.       int var6 = var2;
  132.       if (var4 == null) {
  133.          return var5;
  134.       } else {
  135.          while(var4 != null) {
  136.             if (var4.accepted()) {
  137.                var5 = var6;
  138.             }
  139.  
  140.             if (var6 > var3 - 1) {
  141.                if ((var3 == var1.length() || var1.charAt(var3 + 1) == '\n' || var1.charAt(var3 + 1) == '\r') && super.dfa.nextState(var4, 3) != null) {
  142.                   var5 = var6--;
  143.                }
  144.                break;
  145.             }
  146.  
  147.             var8 = var4;
  148.             var7 = var1.charAt(var6++);
  149.             var4 = super.dfa.nextState(var4, var7);
  150.          }
  151.  
  152.          if ((var7 == '\n' || var7 == '\r') && super.dfa.nextState(var8, 3) != null) {
  153.             --var6;
  154.             var5 = var6;
  155.          }
  156.  
  157.          return var5;
  158.       }
  159.    }
  160.  
  161.    protected String simpleSubstitute(String var1, String var2) {
  162.       MatchInfo var3 = this.match(var1);
  163.       return var3 == null ? var1 : var1.substring(0, var3.start()) + this.processReplacement(var2, var3.matchString()) + var1.substring(var3.end(), var1.length());
  164.    }
  165.  
  166.    protected int matchHead(String var1, int var2, int var3, DState var4) {
  167.       int var5 = this.matchInside(var1, var2, var3, super.dfa.nextState(var4, 2));
  168.       if (var5 != -1) {
  169.          int var6 = this.matchInside(var1, var2, var3, var4);
  170.          if (var6 > var5) {
  171.             var5 = var6;
  172.          }
  173.       }
  174.  
  175.       return var5;
  176.    }
  177.  
  178.    protected String processReplacement(String var1, String var2) {
  179.       String var5 = "";
  180.  
  181.       for(int var3 = 0; var3 < var1.length(); ++var3) {
  182.          char var4 = var1.charAt(var3);
  183.          switch (var4) {
  184.             case '&':
  185.                var5 = var5 + var2;
  186.                break;
  187.             case '\\':
  188.                ++var3;
  189.                if (var3 == var1.length()) {
  190.                   new RegExpSyntaxException("Invalid escape sequence.");
  191.                }
  192.  
  193.                var5 = var5 + this.getQuotedChar(var1.charAt(var3));
  194.                break;
  195.             default:
  196.                var5 = var5 + var4;
  197.          }
  198.       }
  199.  
  200.       return var5;
  201.    }
  202. }
  203.